const { app, BrowserWindow, ipcMain, Tray, Menu } = require('electron')
const path = require('path')
const { downloadFile, generateAndSaveDeviceId } = require('./func.cjs')

// 定义主程序窗口
let mainWindow

//
// 阻止应用多开
const gotTheLock = app.requestSingleInstanceLock()

if (!gotTheLock) app.quit()
else {
  app.on('second-instance', () => {
    // 有人试图运行第二个实例，我们应该关注我们的窗口
    if (mainWindow) {
      if (mainWindow.isMinimized()) myWindow.restore()
      if (!mainWindow.isVisible()) mainWindow.show()
      mainWindow.focus()
    }
  })

  app.whenReady().then(() => {
    createWindow()
    createTrayIcon()
  })
  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
  app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') app.quit()
  })
  // 这将禁用 Electron 应用程序的代理设置，直接使用系统网络设置进行请求
  app.commandLine.appendSwitch('no-proxy-server')
}

//
// 创建主程序窗口
function createWindow() {
  mainWindow = new BrowserWindow({
    width: 450,
    height: 600,
    frame: false,
    resizable: true,
    icon: path.join(__dirname, '../public/icon.png'),
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      devTools: true, //客户端能否打开开发者工具（快捷键：ctrl+shift+i）
      // webSecurity: false,
    },
  })

  // 设置窗口的最小尺寸
  mainWindow.setMinimumSize(400, 600)
  if (!app.isPackaged) mainWindow.loadURL('http://127.0.0.1:7034/')
  else
    mainWindow.loadURL(
      `file://${path.join(__dirname, '../dist_resourcePool/index.html')}`
    )

  mainWindow.on('close', (event) => {
    if (!app.isQuiting) {
      event.preventDefault()
      mainWindow.hide()
    }
    // 返回 false ，阻止默认关闭行为
    return false
  })
}

// 主程序窗口最小化
ipcMain.on('min-window', () => mainWindow.minimize())
// 切换主窗口最大化
ipcMain.on('max-window', () => {
  if (mainWindow.isMaximized()) mainWindow.unmaximize()
  else mainWindow.maximize()
})
// 确认是否关闭主程序窗口
ipcMain.on('close-window', () => mainWindow.close())

//
//
// 托盘
let tray = null
// 创建托盘图标，以及菜单栏
function createTrayIcon() {
  if (!tray) {
    if (!app.isPackaged) {
      tray = new Tray(path.join(__dirname, '../public/icon.png'))
    } else {
      tray = new Tray(
        path.join(
          path.dirname(app.getPath('exe')),
          '/resources/public/icon.png'
        )
      )
    }
  }

  const contextMenu = Menu.buildFromTemplate([
    { label: '显示app', click: () => mainWindow.show() },
    {
      label: '退出app',
      click: () => {
        app.isQuiting = true
        app.quit()
      },
    },
  ])

  tray.setToolTip('资源池')
  tray.setContextMenu(contextMenu)
  tray.on('click', () => mainWindow.show())
}

// 下载文件
ipcMain.on('down-file', (_, path) => downloadFile(path, mainWindow))
// 生成并保存设备id
ipcMain.on('device-id-create', () => generateAndSaveDeviceId())
// 获取设备id
ipcMain.on('device-id-get', () => {
  const deviceId = generateAndSaveDeviceId()
  if (deviceId.length === 0) return
  mainWindow.webContents.send('device-id-send', deviceId)
})
